# 面向对象编程
# 封装,继承,多态
# 类和对象
# 类命名采用大驼峰,这个和java是一致是,
# 但是变量命名和java不一致
class Washer():
    # 实现逻辑
    def wash(self):
        print("我会洗衣服")
        # 这个是指调用函数对象,也就是java中的this
        print(self)
        pass

    def print_info(self):
        # 类你们获取属性
        print(f'这个width:{self.width}')
        print(f'这个height:{self.height}')
        pass

    pass


# 实例化方式
haier1 = Washer()
# haier1.wash()
print(haier1)

# 添加和获取对象属性,
print('-------------类外面获取属性和-------------')
haier1.width = 500
haier1.height = 800
print(haier1.width)
print(haier1.height)

# 对象属性
print('-------------类外面赋值属性,类里面获取属性和-------------')

haier1 = Washer()
haier1.width = 500
# print(haier1.width)
haier1.height = 800
# print(haier1.height)
haier1.print_info()

print('-------------魔法方法---------------------')


class Washer1():
    # 初始化的函数
    # def __init__(self):
    #     print('默认被调用,就像java的构造方法,说不定还可以传参')
    #     # 添加实例属性
    #     self.width = 500
    #     self.height = 800
    #     pass

    def __init__(self, width, height):
        """
        是不是构造方法只能有一个呢,
        多的就要自己看着办了
        :param width: 
        :param height: 
        """
        print(f'这个是带参构造方法')
        self.width = width
        self.height = height
        pass

    # __str__方法就是java中的toString方法
    def __str__(self):
        return (f'Washer1对象 ')

    # __del__
    def __del__(self):
        # 删除对象时候,默认调用del方法
        print(f'{self}已经被删除了')
        pass

    def print_info(self):
        # 类你们调用实例属性
        print(f'洗衣机的宽度是:{self.width},洗衣机的高度是:{self.height}')
        pass

    pass


haier1 = Washer1(10, 20)
haier1.print_info()
print(haier1)
print()
del haier1
print('----------------------------------')
print()
print()
print()
print()

print('----------------------------------')
print()
print()
print()
print()
print()
